package com.car.order.client;

import com.car.commons.core.model.Result;
import com.car.order.client.model.shopping.goodsInfo.GoodsInfoDto;
import com.car.order.dto.goods.GoodsDto;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

@FeignClient(name = "car-shopping",path = "/shopping")
public interface CarShoppingClient {

    /**
     * 通过商品ids
     * 返回一个商品dto的list
     * 顺便帮我检传入id的商品的商品类型状态是否正常
     * @param ids 商品id的无序集合
     * @return
     * @throws Exception
     */
    @GetMapping("/goodsInfo/findGoodsInfoListByIds.ty")
    public Result<List<GoodsInfoDto>> findGoodsInfoListByIds(@RequestParam("ids") Set<Integer> ids) throws Exception;

    /**下单时调用
     * 传入Set<GoodsDto>,通过id找到对应商品，然后减少其库存量和增加冻结量
     * @param goods
     * @return
     */
    @PostMapping("/goodsInfo/reduceGoodsStock.ty")
    public Result reduceStockAndAddFreezeStock(@RequestBody Set<GoodsDto> goods);

    /**支付后，取消订单调用
     * 传入Set<GoodsDto>,通过id找到对应商品，然后增加其库存量
     * @param goods
     * @return
     */
    @PostMapping("/goodsInfo/addGoodsStock.ty")
    public Result addStock(@RequestBody Set<GoodsDto> goods);

    /**下单但未支付时，取消订单
     * 传入Set<GoodsDto>,通过id找到对应商品，然后增加其库存量和减少冻结量
     * @param goods
     * @return
     */
    @PostMapping("/goodsInfo/addGoodsStock.ty")
    public Result addStockAndReduceFreezeStock(@RequestBody Set<GoodsDto> goods);

    /**
     * 支付订单后减少冻结量
     * 传o入Set<GodsDto>,通过id找到对应商品，减少冻结量
     * @param goods
     * @return
     */
    @PostMapping("/goodsInfo/reduceGoodsFreezeStock.ty")
    Result reduceFreezeStock(@RequestBody Set<GoodsDto> goods);


    /**
     * 支付回调时，减少库存量
     * 传o入Set<GodsDto>,通过id找到对应商品，减少库存量
     * @param goodsDtos
     * @return
     */
    @PostMapping("/goodsInfo/reduceStock.ty")
    Result reduceStock(@RequestBody Set<GoodsDto> goodsDtos);
}
